Semantic Conventions for Go Runtime Metrics
Go の計装においては prometheus/client_golang がデファクトになっているので,これとの対応を書いてみる go.memory.used Go のアロケータが OS から確保しているメモリ
go_memstats_sys_bytes - go_memstats_heap_released_bytes
go.memory.type:
stack スタックとして確保しているメモリ(OS スタックを含まない)
go_memstats_stack_inuse_bytes
otherその他
go_memstats_sys_bytes - go_memstats_heap_released_bytes - go_memstats_stack_inuse_bytes
go_gc_gomemlimit_bytes
go.memory.allocated アプリケーションがアロケータから確保したメモリ(counter)
go_memstats_alloc_bytes_total
go.memory.allocations確保の回数
go_memstats_mallocs_total
定義が今のところ/gc/heap/allocs:objectsなので tiny allocation のぶんずれるが使える値ではある
go.memory.gc.goal GC における目標ヒープサイズ(次に GC が実行されるヒープサイズ?)
go_memstats_next_gc_bytes
go_goroutines
go_sched_gomaxprocs_threads
go.schedule.duration
go_sched_latencies_seconds_{count,sum,bucket}
go_gc_gogc_percent
作業メモ(memstats などの定義)
memstats 以外は runtime/metrics の中身から自動生成される
go_memstats_alloc_bytes
/memory/classes/heap/objects:bytes
名前が似ている気がするgo.memory.usedとは異なる値であるようだ
go_memstats_sys_bytes
/memory/classes/total:bytes
go_memstats_mallocs_total
/gc/heap/allocs:objects + /gc/heap/tiny/allocs:objects
go_memstats_frees_total
/gc/heap/frees:objects + /gc/heap/tiny/allocs:objects
/gc/heap/tiny/frees:objectsはないらしく,malloc - freesで生きているオブジェクトを計算できるようにこうしているらしい
go_memstats_heap_alloc_bytes
/memory/classes/heap/objects:bytes
go_memstats_heap_sys_bytes
/memory/classes/heap/objects:bytes + /memory/classes/heap/unused:bytes + /memory/classes/heap/released:bytes + /memory/classes/heap/free:bytes
すごい
go_memstats_heap_idle_bytes
/memory/classes/heap/released:bytes + /memory/classes/heap/free:bytes
go_memstats_heap_inuse_bytes
/memory/classes/heap/objects:bytes + /memory/classes/heap/unused:bytes
go_memstats_heap_released_bytes
/memory/classes/heap/released:bytes
go_memstats_heap_objects
/gc/heap/objects:objects
go_memstats_stack_inuse_bytes
/memory/classes/heap/stacks:bytes
go_memstats_stack_sys_bytes
/memory/classes/heap/stacks:bytes + /memory/classes/os-stacks:bytes
go_memstats_next_gc_bytes
/gc/heap/goal:bytes